﻿#pragma once

#include <cstdint>
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#include <limits.h>
#include <dlfcn.h>
typedef uint16_t WORD;
typedef uint32_t DWORD;
typedef void *LPVOID;
typedef int32_t *LPINT;
typedef uint8_t LPBYTE;
#endif

#include <cstdint>

#ifndef BRIDGE6DLL_API
#ifdef _WIN32
#ifdef _USRDLL
#define BRIDGE6DLL_API extern "C" __declspec(dllexport)
#else
#define BRIDGE6DLL_API extern "C" __declspec(dllimport)
#endif
#else
#define BRIDGE6DLL_API extern "C"
#endif
#endif

#define STD_COUT BOOST_LOG_TRIVIAL(info)
#define STD_CERR BOOST_LOG_TRIVIAL(error)
#define STD_ENDL ""

typedef unsigned char BYTE;
typedef int32_t BOOL;
typedef float *PFLOAT;

#define MAX_DOTS (24 * 3600 * 50) // 最大谱图点数，最大支持24小时50HZ数据量。
#define MAX_ANAL_RESULTS 4096     // 最大积分结果数
#define MAX_EVENTS 512            // 最大手动事件数
#define MAX_COMPS 512             // 最大组分数
#define MAX_GROUPS 512            // 最大分组数
#define MAX_SEGMENTS 16           // 最大分段积分数
#define MAX_CALIBRATIONS 512      // 最大校正文件数
#define MAX_CALIB_RESULTS 512     // 最大校正结果数

#ifndef B8192

#ifndef M_PI
#define M_PI 3.1415926
#endif
#define C4 4
#define C8 8
#define C16 16
#define C64 64
#define C256 256
#define C512 512
#define B4 4
#define B8 8
#define B16 16
#define B32 32
#define B64 64
#define B96 96
#define B128 128
#define B256 256
#define B512 512
#define B1024 1024
#define B2048 2048
#define B3072 3072
#define B4096 4096
#define B8192 8192

// 句柄类型
enum E_HANDLE_TYPE
{
    METHOD_HANDLE = 0, // 方法句柄
    ORG_HANDLE = 1,    // 谱图句柄
};

// 谱图文件类型
enum E_SMP_TYPE
{
    BY_SMP = 0, // 试样
    BY_STD = 1, // 标样
    BY_BSL = 2, // 基线
};

// 空白扣除模式
enum E_SUB_TYPE
{
    SUB_NONE = 0,    // 不扣除
    SUB_ON_CONC = 1, // 直接扣除含量
    SUB_ON_RESP = 2, // 扣响应值后算含量
};

// 变宽模式
enum E_PKWD_MODE
{
    WD_FIXED = 0,   // 固定不变
    WD_TDOUBLE = 1, // 倍宽
    WD_AUTO = 2,    // 自适应
};

// 拖尾峰检测模式
enum E_TAIL_MODE
{
    TAIL_0 = 0, // 不检测拖尾峰
    TAIL_1 = 1, // 强拖尾检测
    TAIL_2 = 2, // 弱拖尾检测
};

// 定量基准
enum E_BASEDON
{
    ON_AREA = 0,   // 面积
    ON_HEIGHT = 1, // 峰高
};

// 定量方法
enum E_QUANTBY
{
    BY_NONE = -1,
    BY_NORMAL = 0,   // 归一化
    BY_S_FACT = 1,   // 修正归一
    BY_INT_STD = 2,  // 内标法
    BY_EXT_STD = 3,  // 外标法
    BY_EXPAND = 4,   // 指数法
    BY_ISTD_PER = 5, // 内标归一
    BY_ESTD_PER = 6, // 外标归一
};

enum E_QUALITBY // 定性模式
{
    BY_BAND = 0,   // 时间带
    BY_WINDOW = 1, // 时间窗
    BY_SERIAL = 2, // 顺序法
};

// 积分事件
enum TICKMARK
{                        // 峰辨识标志
    NO_TICK = 0,         // 无标志
    START_TICK = 1,      // 起点
    VALLEY_TICK = 2,     // 谷点
    APEX_TICK = 4,       // 顶点
    STOP_TICK = 8,       // 止点
    SOL_TICK = 16,       // 溶剂峰
    TAN_START_TICK = 32, // 切线起点
    TAN_STOP_TICK = 64,  // 切线止点
    PIXEL_TICK = 128,    //(Windows环境下无意义)
    DELAY_TICK = 256,    // 死时间事件开始
    UNDELAY_TICK = 512,  // 死时间事件结束
};

// 分析过返回码
enum CODE
{
    ANAL_NOP = 0,     // 空运行
    ANAL_OK = 1,      // 正常运行
    ANAL_STOP = 2,    // 停止运行
    ANAL_TEST = 3,    // 自动测试出两个重要的峰辨识参数：“最小峰宽”和“噪声阈值”
    ANAL_ERROR = 4,   // 运行过程出错
    ANAL_PEAKEND = 5, // 峰组结束
};

// 手动事件标志
enum EVENT
{
    PEAK_START = 0,          // 调整起始点
    PEAK_END = 1,            // 调整结束点
    PEAK_MOVE_SPLIT = 2,     // 移动分割线
    PEAK_ADD_SPLIT = 3,      // 增加分割线
    PEAK_DEL_SPLIT = 4,      // 删除分割线
    PEAK_ADD_ONLYONE = 5,    // 增加单一峰
    PEAK_DELETE = 6,         // 删除峰
    BASE_VALLEY = 7,         // 谷谷基线
    BASE_TOGETHER = 8,       // 强制垂切(峰合并)
    BASE_TAIL_TANGENT = 9,   // 强制拖尾(后切线切割)
    BASE_FRONT_TANGENT = 10, // 前切线切割
    BASE_LOCK = 11,          // 基线锁定      //实时事件
    BASE_NEGATIVE = 12,      // 指定负峰区    //实时事件
    BASE_M_NEGATIVE = 13,    // 指定M型负峰区 //实时事件

    // 以下事件暂不使用：
    BASE_MERGE_UPMOST = 14, // 并入极高峰
    BASE_XXX = 15,          //(保留)
    BASE_FORW_HORI = 16,    // 向前水平基线
    BASE_BACK_HORI = 17,    // 向后水平基线

    PARA_WIDTH = 18, // 调整峰宽参数
    PARA_NOISE = 19, // 调整噪声参数
    PARA_DRIFT = 20, // 调整漂移参数

    // 实时事件的后处理引用:
    BASE_TOGETHER_ = 32, // 强制垂切(峰合并)		//后处理事件
    BASE_TAIL_TANGENT_,  // 强制拖尾(后切线切割)	//后处理事件
    BASE_NEGATIVE_,      // 指定负峰区	//后处理事件(尚未实现)
    BASE_M_NEGATIVE_,    // 指定M型负峰区	//后处理事件(尚未实现)
    BASE_MERGE_UPMOST_,  // 并入最高峰	//后处理事件(尚未实现)

    // 无事件
    NOEVENT = -1
};

// 版本
enum
{
    _CHS_ = 0x00000804, // 中文
    _ZHH_ = 0x00000C04, // 中文(香港)
    _ZHM_ = 0x00001404, // 中文(澳门)
    _CHT_ = 0x00000404, // 中文(台湾)
    _ZHI_ = 0x00001004, // 中文(新加坡)
    _ENU_ = 0x00000409, // 英文(美国)
    _ENG_ = 0x00000809, // 英文(英国)
};

// 手动事件参数
union TPRGPARA
{
    float f;
    int32_t n;
    BOOL b;
};

// 自动峰参数学习池
struct AUTOPOOL
{
    int32_t *buf; // 数据缓冲区(为一循环队列)
    int32_t len;  // 缓冲区长
    int32_t cnt;  // 队列结束指针(开始指针总是为0)
    int32_t ovr;  // 结束指针是否已调头过
};

// 自动参数
struct AUTOPARA
{
    float pkWidth;   // 最小峰宽(min)
    int32_t pkNoise; // 噪声阈值(uV)
    float pkDrift;   // 基线漂移(uV/sec)
};

// 标样用量
struct TDLLMETRIC
{
    double enrich;      // 浓缩因子(无单位)
    double amount;      // 样品量(mol,ml,ul,g,mg)
    double dilution;    // 稀释量(ml)
    double injVolume;   // 进样量(ul)
    BOOL byCalib;       // 是否为标样
    int32_t concFactor; // 组分浓度(含量)单位因子[2(100:%,mg%ml),6(10^6:ppm),9(10^9:ppb),12(10^12:ppt)]
    int32_t amtK;       // 样品量单位因子[-1(mg),1000(ml),%(0),-1000(g),ul(-1)]
    int32_t istdK;      // 内标量单位因子
    float columnLength; // 柱长(单位：米)
    float deadTime;     // 死时间(min)
};

// 品控因子
struct TUkPkFactor
{
    int32_t type; // 0--计零, 1--手工输入, x--组分索引+2
    float f0;
    float f1;
    float f2;
    float f3;
    float cLower; // 品控下限
    float cUpper; // 品控上限
};

// 积分参数
struct TIPara
{
    float pkWidth;       // 最小峰宽(min)
    int32_t pkNoise;     // 噪声阈值(uV)
    float pkDrift;       // 漂移(uV/sec)
    float testPkWidth;   // 自动测试出的峰宽值(min)
    int32_t testPkNoise; // 自动测试出的噪声值(uV)
    float testPkDrift;   // 自动测试出的漂移值(uV/min)
    float initTime;      // 起始积分时间(min)
    float stopTime;      // 自动停止时间(min)
    int32_t minArea;     // 最小峰面积(uV.s)
    int32_t minHeight;   // 最小峰高(uV)
    E_PKWD_MODE wdMode;  // 变宽模式
    float tdouble;       // 倍宽时间(min)
    int32_t tailMode;    // 拖尾峰检测模式
    BOOL autoNegative;   // 是否自动检测负峰
    BOOL shouldSens;     // 是否肩峰敏感
    BOOL tprgUsed;       // 是否使用时间表
    int32_t width;       // 滤波宽度(count) [用于算法内部,界面上不必体现]
    float slope;         // 斜率(uV/count)  [用于算法内部,界面上不必体现]
    float drift;         // 漂移(uV/count)  [用于算法内部,界面上不必体现]
    char nop[B32];
};

// 自动参数
struct AUTOIPARA
{
    int32_t width; // 最小峰宽(min)
    float noise;   // 噪声阈值(uV)
    float drift;   // 基线漂移(uV/count)
};

struct TEPara // 计算参数
{
    E_BASEDON based;   // 定量基准
    E_QUANTBY quantBy; // 定量方法
    BOOL grouped;      // 是否分组
};

// 应用程序接口设置
struct TAPPSetting
{
    char Version[16]; // 版本号
    DWORD LanguageID; // 语言ID
    BYTE Reserves[1024 - (16 + 4)];
};

#endif

// 手动事件表
struct TDLLTPRGListItem
{
    float ts;           // 起始时间(min.)
    float te;           // 结束时间(min.)
    EVENT event;        // 时间事件
    TPRGPARA paraValue; // 参数值
};

// 事件表描述
struct TDLLTPRGINF
{
    TDLLTPRGListItem *head;
    int32_t len;
    LPINT num;
};

// 峰辨识参数描述
struct TDLLIPINF
{
    TIPara *ipara;        // 峰辨识参数 TDLLIPARA *
    TDLLTPRGINF *tprgInf; // 时间表描述 TDLLTPRGINF *
};

// 分段校正数据项
struct TSegCalibItem
{
    double x; // 校正段X值上限
    double a; // 校正段直线斜率
    double b; // 校正段直线截距
};

struct TCompList;
// 组份表
struct TDLLIDTListItem
{
    float f0;                         // 校正因子常数项
    float f1;                         // 校正因子一次项
    float f2;                         // 校正因子二次项
    float f3;                         // 校正因子三次项
    float k;                          // 扩充系数k
    float k1;                         // 扩充系数k1
    float cLower;                     // 品控下限
    float cUpper;                     // 品控上限
    float r;                          // 最小二乘法求取校正因子的相关系数
    E_BASEDON basedOn;                // 定量基准(0-面积, 1-峰高)
    double weight;                    // 组份重量
    char Name[B32];                   // 组份名
    float Time;                       // 保留时间(min.)
    float band;                       // 带宽(min.)
    int16_t istdNoSelf;               // 拟引入的内标物号
    int16_t TypeEx;                   //
    int16_t istdNoUsed;               // 被标定的内标物号
    int16_t Reserve;                  // 显示顺序
    int32_t SegCalibMode;             // 分段校正模式 (0-不分段, 1-低位过零, 2-点点连线)
    int32_t SegCalibCount;            // 校正段数
    TSegCalibItem SegCalibItems[C16]; // 分段校正数据
    int32_t ConcUnitFactor;           // 浓度单位因子值(0-使用配样信息中指定的含量单位, 2+UNIT_N:%, 3+UNIT_N:‰, 6+UNIT_N:ppm, 9+UNIT_N:ppb, 12+UNIT_N:ppt)
    int32_t Reserve_;                 //(保留)
    int32_t HPGOperator;              // 高纯气专用版限值算符
    float HPGLimitValues[3];          // 高纯气专用版限值
    float RefRTime;                   // 参考保留时间
    BYTE Reserves[120 - 3 * sizeof(int32_t) - 4 * sizeof(float)];
};

// 组份表描述
struct TDLLIDTINF
{
    TDLLIDTListItem *head; // 组份表缓区头指针
    int32_t len;           // 缓区长
    LPINT num;
};

struct TDLLResultListItem
{
    double Area;       // 峰面积(uV*s)
    double AreaPer;    // 面积%
    double Conc;       // 含量
    double Areas;      // 峰起点面积(uV*s)
    double Arear;      // 峰顶点面积(uV*s)
    double Areae;      // 峰落点面积(uV*s)
    double ALeft;      // 左峰面积
    double ARight;     // 右峰面积
    int32_t Idno;      // 组份号
    char Name[B32];    // 组份名
    float RTime;       // 保留时间(min.)
    float Height;      // 峰高(uV)
    char TypeCode[B4]; // 峰类型码
    float W50;         // 半高峰宽(min.)
    float Sigma5;      // 5Sigma峰宽(min.)
    float Plates;      // 理论塔片数 = 5.545*(Tr/W50)^2
    float Resolution;  // 分离度= 2.35478/2*(Tr2-Tr1)/(W50_2+W50_1)
    float Symmetry;    // USP拖尾因子 = 5%峰高宽/(2*5%峰高的左宽)
    float M1;          // 统计要素中的平均保留时间
    float M2;          // 统计要素中的峰畸变(展宽)
    float fts;         // 峰起点时间
    float fte;         // 峰落点时间
    int32_t ts;        // 峰起点时间(与采样频率有关)
    float tr;          // 峰顶点时间(与采样频率有关)
    int32_t te;        // 峰落点时间(与采样频率有关)
    float hs;          // 峰起点高度(uV)
    float hsv;         // 峰起点与积分基线垂直相交处的高度(uV)
    float hr;          // 峰顶点高度(uV)
    float he;          // 峰落点高度(uV)
    float hev;         // 峰落点与积分基线垂直相交处的高度(uV)
    char ReserveX[B4]; // 保留字段X
};

// 结果表描述
struct TDLLRESINF
{
    TDLLResultListItem *head; // 结果表缓区头指针
    int32_t len;              // 缓区长
    LPINT num;                // 缓区项目数指针 int32_t *
};

struct TRAWBAG
{
    LPINT head;  // 样品谱图数据缓区头
    int32_t len; // 谱图数据缓区长
    LPINT time;  // 时间计数指针
    PFLOAT freq; //
};

// 样品数据包
struct TSMPBAG
{
    LPVOID metric; // TDLLMETRIC *metric; 样品计量信息描述
    LPVOID rawbag; // RAWBAG	*rawbag; 谱图数据包
    LPINT Base;    // int32_t	*base; 基线谱图数据缓区头
    int32_t baseMaxTime;
};

// 标样用量表
struct TSTDAMTListItem
{
    TDLLMETRIC metric; // 标样用量
    int32_t repNum;    // 重复进样次数 (每个标样的重复进样次数可能不同)
    int32_t reserved;
};

// 标样用量表描述
struct TAMTINF
{
    TSTDAMTListItem *head; // 组份用量表缓区头指针
    int32_t len;           // 缓区长(即允许最多的校正点数)
    LPINT num;             // 缓区项目数(即校正点数)指针 int32_t *
};

// 标样组份浓度表
struct TSTDCPTListItem // 以下项目依次按点序、重复次序、组份号的顺序连续排列
{
    double weight; // 各组份浓度
    double area;   // 各组份峰面积
    float height;  // 各组份峰高
    int32_t Reserved;
};

// 标样组份浓度表描述
struct TCPTINF
{
    TSTDCPTListItem *head; // 组份浓度表缓区头指针
    int32_t len;           // 缓区长
    LPINT num;             // 缓区项目数(校正点数*组份数)指针 int32_t *
};

// 标样表描述
struct TDLLSTDINF
{
    int32_t CurveType; // 校正次数  0 直线 1 二次 2 三次
    int32_t Zero;      // 过零  0 1 2
    TAMTINF *amtInf;   // 标样用量表描述
    TCPTINF *cptInf;   // 标样组份浓度表描述
};

// 分组表
struct TDLLGROUPListItem
{
    double Area;    // 组累计峰面积
    double Height;  // 组累计峰高
    double AreaPer; // 组累计面积%
    double Conc;    // 组累计含量
    float TrLower;  // 保留时间上限(min.)
    float TrUpper;  // 保留时间上限(min.)
    char Name[B32]; // 组名
};

// 分组表缓冲结构
struct TDLLGRPINF
{
    TDLLGROUPListItem *head; // 分组表缓区头指针
    int32_t len;             // 缓区长
    LPINT num;
};

//	峰处理参数描述
struct TDLLEPINF
{
    TEPara *epara;      // 峰辨识参数描述 TDLLEPARA *
    TDLLGRPINF *grpInf; // 分组表描述 TDLLGroupInf *
};

struct TMiscellaneous // analysis.dll中杂项参数
{
    int32_t QualitMode;     // 定量模式 [0-时间带, 1-时间窗, 2-顺序法]
    BOOL RefEnabled;        // 参考峰启用标志
    BOOL IstdAsRef;         // 内标组分是否视作为参考峰
    BOOL Reserve;           //(保留)
    double IdtWindow;       // 组分表时间窗[%]
    double IdtTimeOfs;      // 进样偏移时间[min]
    TUkPkFactor UkPkFactor; // 未知峰校正因子
    double XMinUnitK;       // X轴标注单位(默认min)到最小标注单位(算面积用,默认sec)的换算系数(XMinUnit=XMinUnitK*XUnit, 默认=60)
    double YMinUnit;        // 信号值最小度量单位(uV)到采集器最小度量单位(1uV)的转换系数(默认值=100)
};

// 文件项目
struct TFileItem
{
    char fileName[B256]; // 带扩展名不带路径的文件名称
    char extName[B256];  // 扩展名
    BOOL isFolder;       // 是否是目录
    int64_t fileSize;    // 文件大小【字节】
    int64_t createTime;  // 创建时间戳【自零时区1970.1.1 00:00:00起算的毫秒数】
    int64_t modifyTime;  // 修改时间戳【自零时区1970.1.1 00:00:00起算的毫秒数】
};

// 样品信息
struct TSample
{
    char ID[B64];             // 样品ID
    char Name[B64];           // 样品名称
    int32_t SmpType;          // 样品类型
    char MethodName[B64];     // 分析方法名称
    char InstName[B64];       // 仪器方法名称
    char BatchCode[B64];      // 样品批号
    char BslName[B256];       // 基线谱图全路径名称
    char GatherLocation[B64]; // 取样点
    int32_t GatherTime;       // 取样时间
    int32_t Minutes;          // 分析时长[0.01min]
    char ConcUnit[B64];       // 浓度单位(%,ppm,ppb,ppt,mg%mL,ug/mL,ng/mL,ng/L)
    int32_t CreateTime;       // 创建时间
    int32_t UpdateTime;       // 更新时间
    char Note[B128];          // 备注
};

// 进样信息
struct TInject
{
    char SmpID[B64];     // 样品ID
    char InjID[B64];     // 进样ID
    char GUID[B64];      // 全球唯一标识码
    int32_t Sn;          // 序列ID
    int32_t StartTime;   // 进样开始时间
    int32_t StopTime;    // 进样结束时间
    int32_t AnalMinutes; // 分析时长[0.01min]
    int32_t VialNos;     // 瓶号
    int32_t Syringe;     // 针序
};

// 仪器条件头信息
struct TInstHead
{
    int32_t ID;                // ID
    char Name[B32];            // 仪器名
    int32_t Type;              // 仪器类别(GC, LC, IC, CE-毛细管电泳)
    char TypeAbbr[B8];         // 类别缩写
    char TypeName[B64];        // 类别名
    char Model[B32];           // 型号
    char MarkNo[B32];          // 设备号
    char Manufacturer[B64];    // 制造商
    int32_t SignalNo;          // 信号通路号
    BOOL FromAIACDF;           // 是否来自AIACDF
    char AIACDFName[B32];      // AIA-CDF文件名(不含扩展名)
    char Description[B128];    // 说明(备注)
    char ExperimentTitle[B64]; // 实验标题
    char DatasetOwner[B64];    // 谱图数据属源(单位名称)
    char OperatorName[B32];    // 操作者(分析员)
};

// 柱温箱信息
struct TOvenCond
{
    BOOL Available;       // 是否有效
    int32_t MaxTempRamps; // 最大程升阶数
    double MaxTemp;       // 最高温度[K]
    double Equilibry;     // 平衡时间[min]
    char Model[B32];      // 型号
    double Temperature;   // 柱温[K]
    int32_t TempMode;     // 柱温模式(0-Constant Temp, 1-Programmed)
};

// 进样口信息
struct TInletCond
{
    BOOL Available;        // 是否有效
    int32_t Type;          // 类别
    char TypeAbbr[B8];     // 类别缩写
    char TypeName[B32];    // 类别名
    int32_t InjMode;       // 进样方式(Manual, GSV-气体进样阀, Auto Sampler)
    int32_t ASType;        // 自动进样器分类码(暂不使用)
    double InjVolume;      // 定量管体积[uL]
    char InjectModel[B32]; // 进样器型号
    int32_t TempMode;      // 进样口温度模式(0-Constant Temp, 1-Programmed(COC或PTV时))
    int32_t SplitMode;     // 分流方式(Splitless, Split)
    BOOL PurgeOn;          // 是否隔膜清洗
    double Temperature;    // 进样口温度[K]
    char CarrierGas[B8];   // 载气(N2, H2, He, ...)
    double CarrierFlow;    // 载气流速[mL/min]
    double Pressure;       // 进样口压力[psi]
    double SplitFlow;      // 分流流速[mL/min]
    char SplitRatio[B8];   // 分流比
    double PurgeFlow;      // 隔膜清洗流速[mL/min]
    double PurgeTime;      // 隔膜清洗时间[min]
    double SplitlessHold;  // 不分流保持时间
};

// 色谱柱信息
struct TColumnCond
{
    BOOL Available;     // 是否有效
    int32_t Type;       // 类别(Packed, Capillary, Wide-Bore Capillary, HPLC Column, GPC Column, IC Column, Unknown)
    char TypeAbbr[B8];  // 类别缩写
    char TypeName[B32]; // 类别名
    int32_t FreqIdx;    // 采样频率索引号(0-高速,1-快速,2-中速,3-慢速,4-低速)
    int32_t mmLength;   // 柱长[mm]
    double Diameter;    // 内径[mm]
    double FilmThick;   // 膜后[μm]
    double DeadTime;    // 死时间[min]
    char Model[B32];    // 型号
    double Flow;        // 柱流量[mL/min]
    double Pressure;    // 柱压[psi]
    int32_t PFMode;     // 柱压力/流量模式(Const Pressure, Const Flow, Programmed Pressure, Programmed Flow)
};

// 检测器信息
struct TDetectCond
{
    BOOL Available;         // 是否有效
    int32_t Type;           // 类别(FID, TCD, ECD, NPD, FPD, PID, HID-氦离子化检测器, MSD, UVD, RID, DAD, FD, ECD-电化学, CD-电导, ELSD-蒸发光散射)
    char TypeAbbr[B8];      // 类别缩写
    char TypeName[B32];     // 类别名
    char Model[B32];        // 型号
    double RangeMax;        // 响应最大值
    double RangeMin;        // 响应最小值
    double RangeValue;      // 检测量程[满偏检测量]
    double Sensitivity;     // 检测灵敏度(以量程单位表示的检测量/lsb)
    char DeteUnit[B16];     // 检测单位
    char RangeOptions[B96]; // 量程选项表
    double Temperature;     // 检测器温度[K]
    double H2Flow;          // H2流速[mL/min]
    double AirFlow;         // Air流速[mL/min]
    double RefFlow;         // TCD参考流速[mL/min]
    double AnodeFlow;       // ECD阳极流速[mL/min]
    double Current;         // 检测器电流[mA, ECD为0.1nA]
    char MakeupGas[B16];    // 尾吹气体(N2, H2, He, Ar氩气, CH4, Unknown)
    double MakeupFlow;      // 尾吹流速[mL/min]
    int32_t MakeupMode;     // 尾吹模式(makeup=const, col+makeup=const)
    int32_t GC_RangeIDInc;  // GC之FID/NPD/FPD的量程ID+1 (0x115及后续版本)
    double WaveLength;      // 检测波长[nm]
    int32_t WaveLengthMode; // 波长模式(Constant, Programmed)
    double SuppCurrent;     // 抑制器电流[mA]
    BOOL SuppAvailable;     // 抑制器是否有效
};

// 辅助区条件
struct TAuxCond
{
    BOOL Available;     // 是否有效
    int32_t Type;       // 类别
    char TypeAbbr[B8];  // 类别缩写
    char TypeName[B32]; // 类别名
    char Model[B32];    // 型号
    int32_t SensType;   // 传感类别(0-温度, 1-压力, 2-流量)
    BOOL OnOff;         // 开关状态
    int32_t PosNo;      // 位置号(从1算起)
    double Temperature; // 温度[K]
    int32_t TempMode;   // 温度模式(0-Constant, 1-Programmed)
    double Pressure;    // 压力[psi]
    int32_t PresMode;   // 压力模式(0-Constant, 1-Programmed)
    double Flow;        // 流量[mL/min]
    int32_t FlowMode;   // 流量模式(0-Constant, 1-Programmed)
};

// 泵条件
struct TPumpCond
{
    BOOL Available;        // 是否有效
    int32_t Type;          // 类别(恒流, 二元梯度, 三元梯度, 四元梯度)
    int32_t GradPresMode;  // 梯度压力模式(低压, 高压)
    double MaxPressure;    // 最高压力[psi]
    double MinPressure;    // 最低压力[psi]
    char Model[B32];       // 型号
    double TotalFlow;      // 泵流量[mL/min]
    double Pressure;       // 泵压[psi]
    double SolRatio[C4];   // 溶剂配比[%]
    BOOL SolUsed[C4];      // 溶剂是否被采用
    char SolName[C4][B32]; // 溶剂名称
    char FlowUnit[B16];    // 泵流量单位[mL/min, …]
    char PresUnit[B16];    // 泵压单位[Mpa, psi, bar]
};

// 温度(压力/流量)升降程序
struct TRampItem
{
    double RampRate;   // 升降速率[℃/min, psi/min, mL/min]
    double FinalValue; // 终值[K, psi, mL/min]
    double HoldTime;   // 保持时间[min]
    double TotalTime;  // 总计时间[min]
};

// 泵梯度程序
struct TPumpGradItem
{
    double Time;         // 时间[min]
    double TotalFlow;    // 总流量[mL/min]
    double SolRatio[C4]; // 各溶剂占的比率[%]
};

// 波长程序
struct TWaveLengthItem
{
    double Time;   // 时间[min]
    int32_t Value; // 波长
};

// 单精度浮点数阶升数据项
struct TFloatRampItem
{
    float RampRate;   // 升降速率[℃/min, psi/min, mL/min]
    float FinalValue; // 终值[K, psi, mL/min]
    float HoldTime;   // 保持时间[min]
    float TotalTime;  // 总计时间[min]
};

// 扩充的辅助区条件
struct TAuxCondEx
{
    BOOL Available;               // 是否有效
    int32_t Type;                 // 类别(辅助加热区类型/辅助压力的气体类型)
    char TypeAbbr[B8];            // 类别缩写
    char TypeName[B32];           // 类别名
    char Model[B32];              // 型号(即辅助区说明)
    int32_t SensType;             // 传感类别(0-温度, 1-压力, 2-流量)
    BOOL OnOff;                   // 开关状态
    int32_t PosNo;                // 位置号(从1算起)
    TFloatRampItem RampItems[C8]; // 阶升数据(含初时值, 温度-K, 压力-psi, 流量-mL/min)
};

struct TInstCond
{
    char Name[B256];                      // 仪器条件名
    TInstHead InstHead;                   // 仪器条件头信息
    TOvenCond OvenCond;                   // 柱箱条件
    TInletCond InletCond;                 // 进样口条件
    TColumnCond ColumnCond;               // 色谱柱条件
    TDetectCond DetectCond;               // 检测器条件
    TAuxCond AuxCond;                     // 辅助区条件
    TPumpCond PumpCond;                   // 泵条件
    TRampItem OvenTempItems[C64];         // 柱箱程序升温梯度
    TRampItem InletTempItems[C64];        // 进样口程序升温梯度
    TRampItem ColumnPFItems[C64];         // 色谱柱程序压力梯度
    TRampItem MakeupFlowItems[C64];       // 吹扫气程序流量梯度
    TPumpGradItem PumpGradItems[C64];     // 泵程序流量梯度
    TWaveLengthItem WaveLengthItems[C64]; // 光谱箱程序波长梯度
    TAuxCondEx AuxCondExs[C64];           // 扩充的辅助区条件
    int32_t OvenTempItemsCount;           // 柱箱程序升温梯度柱箱程序升温梯度有效个数
    int32_t InletTempItemsCount;          // 进样口程序升温梯度有效个数
    int32_t ColumnPFItemsCount;           // 色谱柱程序压力梯度有效个数
    int32_t MakeupFlowItemsCount;         // 吹扫气程序流量梯度有效个数
    int32_t PumpGradItemsCount;           // 泵程序流量梯度有效个数
    int32_t WaveCountItemsCount;          // 光谱箱程序波长梯度有效个数
    int32_t AuxCondExsCount;              // 扩充的辅助区条件有效个数
};

// 积分结果表
struct TAnalResult
{
    double Area;       // 峰面积(uV*s)
    double AreaPer;    // 面积%
    double Conc;       // 含量
    double Areas;      // 峰起点面积(uV*s)
    double Arear;      // 峰顶点面积(uV*s)
    double Areae;      // 峰落点面积(uV*s)
    double ALeft;      // 左峰面积
    double ARight;     // 右峰面积
    int32_t Idno;      // 组份号
    char Name[B32];    // 组份名
    float RTime;       // 保留时间(min.)
    float Height;      // 峰高(uV)
    char TypeCode[B4]; // 峰类型码
    float W50;         // 半高峰宽(min.)
    float Sigma5;      // 5Sigma峰宽(min.)
    float Plates;      // 理论塔片数 = 5.545*(Tr/W50)^2
    float Resolution;  // 分离度= 2.35478/2*(Tr2-Tr1)/(W50_2+W50_1)
    float Symmetry;    // USP拖尾因子 = 5%峰高宽/(2*5%峰高的左宽)
    float M1;          // 统计要素中的平均保留时间
    float M2;          // 统计要素中的峰畸变(展宽)
    float fts;         // 峰起点时间
    float fte;         // 峰落点时间
    int32_t ts;        // 峰起点时间(与采样频率有关)
    float tr;          // 峰顶点时间(与采样频率有关)
    int32_t te;        // 峰落点时间(与采样频率有关)
    float hs;          // 峰起点高度(uV)
    float hsv;         // 峰起点与积分基线垂直相交处的高度(uV)
    float hr;          // 峰顶点高度(uV)
    float he;          // 峰落点高度(uV)
    float hev;         // 峰落点与积分基线垂直相交处的高度(uV)
    char ReserveX[B4]; // 保留字段X
};

// 综合结果表
struct TSynResult
{
    char Name[B32];         // 组分名/组名
    int32_t Type;           // 0-组分, 1-连续组, 2-间断组, 3-未知峰合计, 4-外部组分, 5-主要组成, -1-合计
    int32_t OkState;        // 0-未检出, 1-偏低, 2-偏高, 3-OK
    float Tr;               // 保留时间
    float Band;             // 带宽
    float cLower;           // 品控下限
    float cUpper;           // 品控上限
    double Area;            // 组累计峰面积
    double Height;          // 组累计峰高
    double Conc;            // 实测含量
    double ConcEx;          // 含量扩充(如发热量、TVOC标准状态含量等)
    float dLimit;           // 检出限
    int32_t ConcUnitFactor; // 浓度单位因子值
};

// 手动事件表
struct TEventList
{
    float ts;           // 起始时间(min.)
    float te;           // 结束时间(min.)
    EVENT event;        // 时间事件
    TPRGPARA paraValue; // 参数值，需根据不同事件解析成bool、int或double
    BOOL enable;        // 是否有效
    int32_t channelNo;  // 通道号
    int32_t order;      // 显示顺序
};

// 组份表
struct TCompList
{
    float f0;           // 校正因子常数项
    float f1;           // 校正因子一次项
    float f2;           // 校正因子二次项
    float f3;           // 校正因子三次项
    float k;            // 扩充系数k
    float k1;           // 扩充系数k1
    float cLower;       // 品控下限
    float cUpper;       // 品控上限
    float r;            // 最小二乘法求取校正因子的相关系数
    E_BASEDON basedOn;  // 定量基准(0-面积, 1-峰高)
    double weight;      // 组份重量
    char Name[B32];     // 组份名
    float Time;         // 保留时间(min.)
    float band;         // 带宽(min.)
    int16_t istdNoSelf; // 拟引入的内标物号
    int16_t TypeEx;     //
    int16_t istdNoUsed; // 被标定的内标物号
    int16_t channelNo;  // 通道号
    int16_t order;      // 显示顺序
};

// 分组表
struct TGroupList
{
    char Name[B32];         // 组名
    char IdNames[C64][B32]; // 组分名表
    char RefIdName[B32];    // 参考组分
    BOOL Continuous;        // 是否连续组
    BOOL NeedRefId;         // 是否需要参考组分
    float tLower;           // 时间下限(min.)
    float tUpper;           // 时间上限(min.)
    float cLower;           // 品控下限
    float cUpper;           // 品控上限W
    float dLimit;           // 检出限
    int32_t ConcUnitFactor; // 浓度单位因子值
    int32_t channelNo;      // 通道号
    int32_t order;          // 显示顺序
};

// 分段校正数据项
struct TSegmentItem
{
    double x; // 自变量值
    double a; // 校正系数a
    double b; // 校正系数b
};

// 分段校正表
struct TSegmentList
{
    int32_t SegmentMode;           // 分段校正模式
    int32_t SegmentCount;          // 分段数量
    TSegmentItem SegmentItem[C16]; // 分段校正数据项数组
    int32_t channelNo;             // 通道号
    int32_t order;                 // 显示顺序
};

// 校正头信息
struct TCalibHead
{
    int32_t CurveType; // 校正曲线类型
    int32_t ZeroType;  // 零点类型
    int32_t IdtCount;  // 标识数量
};

// 校正表，记录数=参与校正的标谱图数
struct TCalibList
{
    char OrgName[B256];   // 原始文件名
    char GUID[B64];       // 全球唯一标识
    double StdConc[C256]; // 标准浓度数组
    double Resp[C256];    // 响应值数组
    double shift[C256];   // 偏移量数组
    int32_t channelNo;    // 通道号
    int32_t order;        // 显示顺序
};

// 校正结果表，记录数=组份数
struct TCalibResult
{
    int32_t Idno;      // 组份号
    char Name[B32];    // 组份名
    double f0;         // 校正因子常数项
    double f1;         // 校正因子一次项
    double f2;         // 校正因子二次项
    double f3;         // 校正因子三次项
    double r;          // 相关系数
    int32_t channelNo; // 通道号
    int32_t order;     // 显示顺序
};

// 谱图原始数据
struct TRawItem
{
    int16_t Status;
    int32_t Time;
    int32_t Data;
};

struct TMethodHead_
{
    int32_t Identifier;    // 标识符
    int32_t Version;       // 版本号
    char Name[B64];        // 名称
    char GUID[B64];        // 全球唯一标识
    char ProjectID[B64];   // 项目ID
    char ProjectName[B64]; // 项目名称
    int32_t CreateTime;    // 创建时间
    int32_t UpdateTime;    // 更新时间
    char RelatedID[B64];   // 相关ID
    char Note[B128];       // 备注
    TEPara EPara;          // 计算参数
    TIPara IPara;          // 积分参数
    E_QUALITBY QualitBy;   // 定性模式
    TDLLMETRIC metric;     // 标样用量
    AUTOIPARA autoIPara;   // 自动参数

    TUkPkFactor UkPkFactor[C4]; // 品控因子
    double XUnit[C4];           // 采样周期(1/Freq)到时间标称单位(XLabel)的换算系数(XUnit=1/(60*Freq))
    double YUnit[C4];           // 检测器标称单位(mV)到采集器最小信号单位(uV)的转换系数(默认值=1000)
    TCalibHead CalibHead[C4];   // 校正头信息

    int32_t EventListOffset;   // 手动事件表偏移量
    int32_t EventListCount;    // 手动事件表项目数
    int32_t CompListOffset;    // 组份表偏移量
    int32_t CompListCount;     // 组份表项目数
    int32_t GroupListOffset;   // 分组表偏移量
    int32_t GroupListCount;    // 分组表项目数
    int32_t SegmentListOffset; // 分段校正表偏移量
    int32_t SegmentListCount;  // 分段校正表项目数
    int32_t CalibListOffset;   // 校正表偏移量
    int32_t CalibListCount;    // 校正表项目数
    int32_t CalibResultOffset; // 校正结果表偏移量
    int32_t CalibResultCount;  // 校正结果表项目数
};

// 方法数据头
struct TMethodHead : TMethodHead_
{
    char Reserved1[B1024 - sizeof(TMethodHead_)]; // 保留区域1
};

struct TOrgHead_
{
    int32_t Identifier;    // 标识符
    int32_t Version;       // 版本号
    char Name[B64];        // 名称
    char GUID[B64];        // 全球唯一标识
    int32_t Type;          // 类型
    char ProjectID[B64];   // 项目ID
    char ProjectName[B64]; // 项目名称

    // 检测器编号: 0xabcdefgh，
    // ab位定义第一信号通道对应的检测器ID，
    // cd位定义第二信号通道对应的检测器ID，
    // ef位定义第三信号通道对应的检测器ID，
    // gh位定义第四信号通道对应的检测器ID，
    // 不支持的信号通道用数值0xff填充对应位。
    int32_t Detector;              // 检测器编号
    int32_t CreateTime;            // 创建时间
    int32_t UpdateTime;            // 更新时间
    E_SUB_TYPE BlankMode;          // 扣除空白模式
    float Frequency;               // 采样频率
    TSample Sample[C4];            // 样品信息
    TInject Inject[C4];            // 进样信息
    char XUnit[C4][B32];           // X轴单位数组
    char YUnit[C4][B32];           // Y轴单位数组
    char RelatedID[C4][B64];       // 相关ID数组
    char Note[C4][B128];           // 备注数组
    int32_t InstCondOffset[C4];    // 仪器条件偏移量
    int32_t InstCondLength[C4];    // 仪器条件长度
    int32_t RawDataOffset[C4];     // 原始数据偏移量
    int32_t RawDataCount[C4];      // 原始数据项目数
    int32_t MethodOffset;          // 方法文件偏移量
    int32_t MethodLength;          // 方法文件数据长度
    int32_t AnalResultOffset[C4];  // 分析结果偏移量
    int32_t AnalResultCount[C4];   // 分析结果项目数
    int32_t SynResultOffset[C4];   // 综合结果偏移量
    int32_t SynResultCount[C4];    // 综合结果项目数
    int32_t StudyDataOffset[C4];   // 研究数据偏移量
    int32_t StudyDataCount[C4];    // 研究数据项目数
    int32_t BlankDataOffset[C4];   // 空白数据偏移量
    int32_t BlankDataCount[C4];    // 空白数据项目数
    int32_t BlankResultOffset[C4]; // 空白结果偏移量
    int32_t BlankResultCount[C4];  // 空白结果项目数
};

// 谱图数据头
struct TOrgHead : TOrgHead_
{
    char Reserved1[B8192 - sizeof(TOrgHead_)]; // 保留区域1
};

// 错误代码定义
// 一般性错误定义
constexpr auto ERR_CODE_FILE_EXISTS = -1001;
constexpr auto ERR_MESSAGE_FILE_EXISTS = "文件\"%s\"已存在。";

constexpr auto ERR_CODE_FILE_NOT_EXISTS = -1002;
constexpr auto ERR_MESSAGE_FILE_NOT_EXISTS = "文件\"%s\"不存在。";

constexpr auto ERR_CODE_FILE_CREATE_FAILED = -1003;
constexpr auto ERR_MESSAGE_FILE_CREATE_FAILED = "创建文件\"%s\"失败。";

constexpr auto ERR_CODE_FILE_OPEN_FAILED = -1004;
constexpr auto ERR_MESSAGE_FILE_OPEN_FAILED = "打开文件\"%s\"失败。";

constexpr auto ERR_CODE_FILE_READ_FAILED = -1005;
constexpr auto ERR_MESSAGE_FILE_READ_FAILED = "读取文件\"%s\"失败。";

constexpr auto ERR_CODE_FILE_WRITE_FAILED = -1006;
constexpr auto ERR_MESSAGE_FILE_WRITE_FAILED = "写入文件\"%s\"失败。";

constexpr auto ERR_CODE_FILE_DELETE_FAILED = -1007;
constexpr auto ERR_MESSAGE_FILE_DELETE_FAILED = "删除文件\"%s\"失败。";

constexpr auto ERR_CODE_FILE_PARSE_FAILED = -1008;
constexpr auto ERR_MESSAGE_FILE_PARSE_FAILED = "解析文件\"%s\"失败。";

constexpr auto ERR_CODE_MEM_ALLOC_FAILED = -1009;
constexpr auto ERR_MESSAGE_MEM_ALLOC_FAILED = "变量\"%s\"内存分配失败。";

constexpr auto ERR_CODE_PPARA_IS_NULL = -1010;
constexpr auto ERR_MESSAGE_PPARA_IS_NULL = "指针变量\"%s\"为nullptr。";

constexpr auto ERR_CODE_IPARAM_VALUE_INVALID = -1101;
constexpr auto ERR_MESSAGE_IPARAM_VALUE_INVALID = "整数参数\"%s\"的值(%d)非法，应取[%d～%d]之间的值。"; // 适用于最小值、最大值限定范围。
constexpr auto ERR_MESSAGE_IPARAM_VALUE_INVALID_1 = "整数参数\"%s\"的值(%d)非法，应取%s之间的值。";     // 适用于小数组枚举数据。

constexpr auto ERR_CODE_FPARAM_VALUE_INVALID = -1102;
constexpr auto ERR_MESSAGE_FPARAM_VALUE_INVALID = "浮点数参数\"%s\"的值(%f)非法，应取[%f～%f]之间的值。";

constexpr auto ERR_CODE_BUFFER_INSUFFICIENT = -1103;
constexpr auto ERR_MESSAGE_BUFFER_INSUFFICIENT = "缓冲区\"%s\"长度(%d)不够，应分配超过%d字节长度。";

constexpr auto ERR_CODE_GENERAL_EXCEPTION = -9998;
constexpr auto ERR_MESSAGE_GENERAL_EXCEPTION = "捕获到一般异常:\"%s\"";

constexpr auto ERR_CODE_UNKNOWN_EXCEPTION = -9999;
constexpr auto ERR_MESSAGE_UNKNOWN_EXCEPTION = "捕获到未知异常:\"%s\"";

// 业务相关错误定义
constexpr auto ERR_CODE_ORG_HANDLE_NOT_EXIST = -6001;
constexpr auto ERR_MESSAGE_ORG_HANDLE_NOT_EXIST = "谱图句柄(%lld)并不存在。";

constexpr auto ERR_CODE_METHOD_HANDLE_NOT_EXIST = -6002;
constexpr auto ERR_MESSAGE_METHOD_HANDLE_NOT_EXIST = "方法句柄(%lld)并不存在。";

constexpr auto ERR_CODE_ORG_HANDLE_IS_SAMPLING = -6003;
constexpr auto ERR_MESSAGE_ORG_HANDLE_IS_SAMPLING = "谱图句柄(%lld)正在采样中，不能操作。";

constexpr auto ERR_CODE_ORG_HANDLE_IS_NOT_SAMPLING = -6004;
constexpr auto ERR_MESSAGE_ORG_HANDLE_IS_NOT_SAMPLING = "谱图句柄(%lld)不在采样中，不能操作。";

constexpr auto ERR_CODE_CHANNEL_IS_SAMPLING = -6005;
constexpr auto ERR_MESSAGE_CHANNEL_IS_SAMPLING = "正在采样中，不能再次启动采样。";

constexpr auto ERR_CODE_CHANNEL_IS_NOT_SAMPLING = -6006;
constexpr auto ERR_MESSAGE_CHANNEL_IS_NOT_SAMPLING = "不在采样中，不能停止采样。";

constexpr auto ERR_CODE_SAMPLING_START_FAILED = -6007;
constexpr auto ERR_MESSAGE_SAMPLING_START_FAILED = "启动采样异常: %s";

constexpr auto ERR_CODE_SAMPLING_STOP_FAILED = -6008;
constexpr auto ERR_MESSAGE_SAMPLING_STOP_FAILED = "停止采样异常: %s";

constexpr auto ERR_CODE_REDIS_TIMEOUT = -6009;
constexpr auto ERR_MESSAGE_REDIS_TIMEOUT = "Redis数据超时。";

constexpr auto ERR_CODE_START_TIMEOUT = -6010;
constexpr auto ERR_MESSAGE_START_TIMEOUT = "仪器启动采样未及时返回有效数据。";

constexpr auto ERR_CODE_STOP_TIME_NOT_SYNC = -6011;
constexpr auto ERR_MESSAGE_STOP_TIME_NOT_SYNC = "仪器停止时间不同步。";

constexpr auto ERR_CODE_GATHER_TIME_NOT_SYNC = -6012;
constexpr auto ERR_MESSAGE_GATHER_TIME_NOT_SYNC = "仪器采样时长不同步。";

constexpr auto ERR_CODE_ORG_HAS_NOT_METHOD = -6013;
constexpr auto ERR_MESSAGE_ORG_HAS_NOT_METHOD = "谱图句柄(%lld)数据不完备，没有方法数据。";

constexpr auto ERR_CODE_ORG_HAS_NOT_RAWDATA = -6014;
constexpr auto ERR_MESSAGE_ORG_HAS_NOT_RAWDATA = "谱图句柄(%lld)数据不完备，通道(%d)没有原始数据。";

constexpr auto ERR_CODE_ORG_HAS_NOT_INSTCOND = -6015;
constexpr auto ERR_MESSAGE_ORG_HAS_NOT_INSTCOND = "谱图句柄(%lld)数据不完备，通道(%d)没有仪器条件数据。";

constexpr auto ERR_CODE_ORG_HAS_NOT_ANAYRESULT = -6017;
constexpr auto ERR_MESSAGE_ORG_HAS_NOT_ANAYRESULT = "谱图句柄(%lld)数据不完备，通道(%d)没有积分结果数据。";

constexpr auto ERR_CODE_ORG_HAS_NOT_SYNCRESULT = -6018;
constexpr auto ERR_MESSAGE_ORG_HAS_NOT_SYNCRESULT = "谱图句柄(%lld)数据不完备，通道(%d)没有综合数据。";

constexpr auto ERR_CODE_ORG_HAS_NOT_STUDYDATA = -6019;
constexpr auto ERR_MESSAGE_ORG_HAS_NOT_STUDYDATA = "谱图句柄(%lld)数据不完备，通道(%d)没有学习数据。";

constexpr auto ERR_CODE_ORG_HAS_NOT_BLANKDATA = -6020;
constexpr auto ERR_MESSAGE_ORG_HAS_NOT_BLANKDATA = "谱图句柄(%lld)数据不完备，通道(%d)没有基线数据。";

constexpr auto ERR_CODE_ORG_HAS_NOT_BLANKRESULT = -6021;
constexpr auto ERR_MESSAGE_ORG_HAS_NOT_BLANKRESULT = "谱图句柄(%lld)数据不完备，通道(%d)没有基线结果数据。";

constexpr auto ERR_CODE_METHOD_HAS_NOT_EVENTLIST = -6022;
constexpr auto ERR_MESSAGE_METHOD_HAS_NOT_EVENTLIST = "方法句柄(%lld,%d)数据不完备，没有手动事件数据。";

constexpr auto ERR_CODE_METHOD_HAS_NOT_COMPLIST = -6023;
constexpr auto ERR_MESSAGE_METHOD_HAS_NOT_COMPLIST = "方法句柄(%lld,%d)数据不完备，没有组分数据。";

constexpr auto ERR_CODE_METHOD_HAS_NOT_GROUPLIST = -6024;
constexpr auto ERR_MESSAGE_METHOD_HAS_NOT_GROUPLIST = "方法句柄(%lld,%d)数据不完备，没有分组数据。";

constexpr auto ERR_CODE_METHOD_HAS_NOT_SEGMENTLIST = -6025;
constexpr auto ERR_MESSAGE_METHOD_HAS_NOT_SEGMENTLIST = "方法句柄(%lld,%d)数据不完备，没有分段积分数据。";

constexpr auto ERR_CODE_METHOD_HAS_NOT_CALIBLIST = -6026;
constexpr auto ERR_MESSAGE_METHOD_HAS_NOT_CALIBLIST = "方法句柄(%lld,%d)数据不完备，没有校正数据。";

constexpr auto ERR_CODE_METHOD_HAS_NOT_CALIBRESULT = -6027;
constexpr auto ERR_MESSAGE_METHOD_HAS_NOT_CALIBRESULT = "方法句柄(%lld,%d)数据不完备，没有校正结果数据。";

constexpr auto ERR_CODE_ANALYSIS = -6088;
constexpr auto ERR_MESSAGE_ANALYSIS = "积分失败。";
